package com.artisan.app.filter;

import com.artisan.medium.app.utils.TokenUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.Serializable;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MyRequest extends HttpServletRequestWrapper implements  Serializable{
    public MyRequest(HttpServletRequest request) {
        super(request);
    }

    @Override
    public String getParameter(String name) {
        return super.getParameter(name);
    }

    @Override
    public Map getParameterMap() {
        Map map=super.getParameterMap();
        if(null!=map&&map.size()>0){
            map=new HashMap(map);
            //如果没有uid就解析token获取uid后设置到request中
            if (!map.containsKey("uid")){
                //解密token
                String tokenstr="";
                if(map.containsKey("token")){
                    Object token=map.get("token");
                    Set key = map.keySet();
                    for(Object aaa: key.toArray()){
                        if(aaa.toString().equals("token")){
                            tokenstr = ((String[])map.get(aaa))[0];
                        }
                    }
                    //验证token
                    Map<String,Object> resultMap= TokenUtils.getTokenMap(tokenstr);
                    if(null!=resultMap&&resultMap.size()>0){
                        //解密成功，赋值到request参数集中
                        // claims.put("uid", uid);;
                        map.put("uid", resultMap.get("uid"));
                        map.put("did", resultMap.get("did"));
                        map.put("t_time",resultMap.get("data"));
                        map.put("Cipher", resultMap.get("Cipher"));
                        map.put("tokenCode","200");
                    }else{
                        //解密token出错
                        map.put("tokenCode","eroor");
                    }
                }else{
                    //token参数为空
                    map.put("tokenCode","parameterNull");
                }
            }
        }
        return map;
    }

    @Override
    public Enumeration<String> getParameterNames() {
        return super.getParameterNames();
    }

    @Override
    public String[] getParameterValues(String name) {
        String[] values = super.getParameterValues(name);
        if("uid".equals(name)){
            values = super.getParameterValues("uid");
        }
        return values;
    }
}
